
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.shape.Rectangle;
import javafx.stage.Popup;

/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */
/**
 *
 * @author enrico
 */
public class AnagraficaController {

  private ObservableList<AnagraficaModel> data;
  private AnagraficaView view;
  private Biblioteca controller;
  private Popup aggiungiUtentePopup;
  private AnagraficaModel temp=null;

  public AnagraficaController(Biblioteca contr) {

    controller = contr;

    // Creo view
    view = new AnagraficaView(this);
    refreshTable();
  }

  public AnagraficaView getView() {
    return view;
  }

  public void showPopup() {
    aggiungiUtentePopup = new Popup();

    AggiungiUtenteView aup = new AggiungiUtenteView(this);
    aggiungiUtentePopup.getContent().addAll(aup);
    ObservableList list = aggiungiUtentePopup.getContent();
    aggiungiUtentePopup.setAutoFix(true);
    aggiungiUtentePopup.setAutoHide(false);
    aggiungiUtentePopup.setHideOnEscape(false);

    aggiungiUtentePopup.show(controller.getRoot().getScene().getWindow());
    controller.getRoot().setDisable(true);
  }

  public void releasePopup() {
    aggiungiUtentePopup.hide();
    controller.getRoot().setDisable(false);
  }

  void aggiungiPersona(String nome, String cognome, String indirizzo1, String indirizzo2, String telefono, String cellulare, String note, String email) {
    try {
      Class.forName("org.sqlite.JDBC");

      Connection conn = DriverManager.getConnection("jdbc:sqlite:lib/biblioteche.db");
      //Statement stat = conn.createStatement();

      PreparedStatement pstmt = conn.prepareStatement("INSERT INTO anagrafica VALUES (?,NULL,?,?,?,?,?,?,?,?)");

      pstmt.setString(1, email);
      pstmt.setString(2, nome);
      pstmt.setString(3, cognome);
      pstmt.setString(4, indirizzo1);
      pstmt.setString(5, indirizzo2);
      pstmt.setString(6, telefono);
      pstmt.setString(7, cellulare);
      pstmt.setString(8, note);
      pstmt.setInt(9, 0);
      pstmt.executeUpdate();

      conn.close();
    } catch (Exception e) {
    }
    releasePopup();
    this.refreshTable();
  }

  private void refreshTable() {
    // Popolo tabella
    try {
      data = FXCollections.observableArrayList();
      Class.forName("org.sqlite.JDBC");
      Connection conn = DriverManager.getConnection("jdbc:sqlite:lib/biblioteche.db");
      Statement stat = conn.createStatement();
      ResultSet rs = stat.executeQuery("select * from anagrafica where rimosso=0");

      while (rs.next()) {
        data.add(new AnagraficaModel(rs.getString("ID"), rs.getString("nome"), rs.getString("cognome"), rs.getString("indirizzo"),
                rs.getString("indirizzo2"), rs.getString("telefono"), rs.getString("cellulare"), rs.getString("note"),
                rs.getString("email")));
      }
      rs.close();
      conn.close();
    } catch (Exception exc) {
      System.out.println(exc.getMessage());
    }
    view.getTableAnagrafica().setItems(data);
    view.getTableAnagrafica().getSelectionModel().selectedItemProperty().addListener(new ChangeListener<AnagraficaModel>() {

      @Override
      public void changed(ObservableValue<? extends AnagraficaModel> anag, AnagraficaModel arg1, AnagraficaModel arg2) {
        if (anag != null && anag.getValue() != null) {
          // selected another row
          AnagraficaModel u = anag.getValue(); // libromodel
          setUtenteData(u.getID(),u.getNome(),u.getCognome(),u.getIndirizzo(),u.getIndirizzo2(),u.getTelefono(),u.getCellulare(),u.getEmail(),u.getNote());
          temp=u;
        }
      }
    });
  }
  
  private void setUtenteData(String iD, String nome, String cognome, String indirizzo, String indirizzo2, String telefono, String cellulare, String email, String note) {
    view.setUtenteData(iD, nome, cognome, indirizzo, indirizzo2, telefono, cellulare, email, note);
  }

  void eliminaUtente(int idUtente) {
    if (idUtente!=0) {
      try {
      Class.forName("org.sqlite.JDBC");
      Connection conn = DriverManager.getConnection("jdbc:sqlite:lib/biblioteche.db");
      
      PreparedStatement pstmt = conn.prepareStatement("UPDATE anagrafica SET rimosso=1 WHERE ID=" + String.valueOf(idUtente));
      //System.out.println("DELETE FROM biblioteche WHERE ID="+String.valueOf(id));
      pstmt.executeUpdate();
      
      pstmt.close();
      conn.close();
      } catch (Exception e) {
        System.out.println(e.getMessage());
      }
      view.setUtenteData("0", "", "", "", "", "", "", "", "");
      this.refreshTable();
    }
  }

  void cambiaCampoUtente(String text, int idUtente, String campo) {
    try {
      Class.forName("org.sqlite.JDBC");
      Connection conn = DriverManager.getConnection("jdbc:sqlite:lib/biblioteche.db");
      PreparedStatement pstmt = conn.prepareStatement("UPDATE anagrafica SET "+campo+"=? WHERE ID="+String.valueOf(idUtente));
      
      pstmt.setString(1, text);
      pstmt.executeUpdate();
      
      if (campo.equalsIgnoreCase("email")) temp.setEmail(text);
      if (campo.equalsIgnoreCase("indirizzo")) temp.setIndirizzo(text);
      if (campo.equalsIgnoreCase("indirizzo2")) temp.setIndirizzo2(text);
      if (campo.equalsIgnoreCase("telefono")) temp.setTelefono(text);
      if (campo.equalsIgnoreCase("cellulare")) temp.setCellulare(text);
      if (campo.equalsIgnoreCase("note")) temp.setNote(text);
      
      conn.close();
      pstmt.close();
    } catch (Exception e) {
      
    }
  }
}
